home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 11587 / 11587.xpi / chrome / aviary.jar / content / progress.js < prev    next >
Text File  |  2009-05-26  |  6KB  |  231 lines

  1. /* Copyright (c) 2008 Pearl Crescent, LLC.  All Rights Reserved. */
  2. /* vim: set sw=2 sts=2 ts=8 et syntax=javascript: */
  3.  
  4. function AviaryProgressMeter()
  5. {
  6.   this.init();
  7. }
  8.  
  9. AviaryProgressMeter.prototype =
  10. {
  11.   mPearlUtil: null,
  12.   mProgressBox: null,
  13.   mName: null,
  14.   mCancelCallback: null,
  15.   mIsCanceling: false,
  16.  
  17.   init: function()
  18.   {
  19.     this.mPearlUtil = com.aviary.talon.pearlutil;
  20.  
  21.     var vbox = document.createElement("vbox");
  22.     var label = document.createElement("label");
  23.     var hbox = document.createElement("hbox");
  24.     var progressmeter = document.createElement("progressmeter");
  25.     var btn = document.createElement("toolbarbutton");
  26.  
  27.     if (vbox && label && hbox && progressmeter && btn)
  28.     {
  29.       const kClassName = "aviary-progressbox";
  30.       vbox.setAttribute("pack", "center");
  31.       vbox.setAttribute("class", kClassName);
  32.       label.setAttribute("crop", "end");
  33.       label.setAttribute("class", "aviary-progresslabel");
  34.       progressmeter.setAttribute("value", "0");
  35.       progressmeter.setAttribute("mode", "undetermined");
  36.  
  37.       var self = this;
  38.       btn.addEventListener("command", function() { self.Cancel(); }, false);
  39.       var tt = this.mPearlUtil.GetLocalizedString("CANCEL_TOOLTIP");
  40.       btn.setAttribute("tooltiptext", tt);
  41.       btn.setAttribute("hidden", "true");
  42.       btn.setAttribute("class", "toolbarbutton-1 aviary-cancelprogress");
  43.  
  44.       hbox.setAttribute("align", "center");
  45.  
  46.       hbox.appendChild(progressmeter);
  47.       hbox.appendChild(btn);
  48.       vbox.appendChild(label);
  49.       vbox.appendChild(hbox);
  50.  
  51.       // Insert to the right of the Aviary Capture button or, if not found,
  52.       // to the end of the Navigation toolbar.
  53.       var insertBeforeNode;
  54.       var captureBtn = document.getElementById("aviary-captureimageofpage");
  55.       if (captureBtn)
  56.       {
  57.         insertBeforeNode = captureBtn.nextSibling;
  58.         while (insertBeforeNode
  59.                && "vbox" == insertBeforeNode.localName
  60.                && kClassName == insertBeforeNode.getAttribute("class"))
  61.         {
  62.           // Skip past other progress meters.
  63.           insertBeforeNode = insertBeforeNode.nextSibling;
  64.         }
  65.       }
  66.  
  67.       if (insertBeforeNode)
  68.         insertBeforeNode.parentNode.insertBefore(vbox, insertBeforeNode);
  69.       else
  70.       {
  71.         var navToolbar = document.getElementById("nav-bar");
  72.         if (navToolbar)
  73.           navToolbar.appendChild(vbox);
  74.       }
  75.  
  76.       if (vbox.parentNode) // Did we add it?
  77.       {
  78.         this.mProgressBox = vbox;
  79.         this.SetIsCancelable(false);
  80.       }
  81.     }
  82.   },
  83.  
  84.   Cancel: function()
  85.   {
  86.     if (!this.mIsCancelable)
  87.       return;
  88.  
  89.     var str = this.mPearlUtil.GetLocalizedString("CANCELING");
  90.     this.SetLabel(str);
  91.     this.mIsCanceling = true;
  92.  
  93.     if (this.mCancelCallback)
  94.       this.mCancelCallback();
  95.   },
  96.  
  97.   IsCanceled: function()
  98.   {
  99.     return this.mIsCanceling;
  100.   },
  101.  
  102.   SetCancelFunction: function(aFunc)
  103.   {
  104.     this.mCancelCallback = aFunc;
  105.   },
  106.  
  107.   SetIsCancelable: function(aIsCancelable)
  108.   {
  109.     this.mIsCancelable = aIsCancelable;
  110.  
  111.     try
  112.     {
  113.       var cancelBtn = this.mProgressBox.firstChild.nextSibling
  114.                           .firstChild.nextSibling;
  115.       if (aIsCancelable)
  116.         cancelBtn.removeAttribute("hidden");
  117.       else
  118.         cancelBtn.setAttribute("hidden", true);
  119.     }
  120.     catch(e) {}
  121.   },
  122.  
  123.   SetName: function(aName)
  124.   {
  125.     if (!aName)
  126.       aName = "";
  127.  
  128.     this.mName = aName;
  129.  
  130.     if (this.mProgressBox)
  131.       this.mProgressBox.setAttribute("tooltiptext", aName);
  132.   },
  133.  
  134.   SetLabel: function(aLabel)
  135.   {
  136.     if (!this.mIsCanceling && this.mProgressBox && this.mProgressBox.firstChild)
  137.     {
  138.       if (!aLabel)
  139.         aLabel = "";
  140.       this.mProgressBox.firstChild.setAttribute("value", aLabel);
  141.     }
  142.   },
  143.  
  144.   SetValue: function(aValue)
  145.   {
  146.     if (this.mProgressBox && this.mProgressBox.firstChild)
  147.     {
  148.       var parent = this.mProgressBox.firstChild.nextSibling;
  149.       var meter = (parent) ? parent.firstChild : null;
  150.       if (meter)
  151.       {
  152.         if (meter.mode == "undetermined")
  153.           meter.mode = "determined";
  154.         meter.setAttribute("value", aValue);
  155.       }
  156.     }
  157.   },
  158.  
  159.   Close: function(aDoFade, aStringName)
  160.   {
  161.     if (this.mProgressBox)
  162.     {
  163.       if (aDoFade)
  164.       {
  165.         var name = (this.mName) ? this.mName : "";
  166.         var str = name;
  167.         if (aStringName)
  168.         {
  169.           str = this.mPearlUtil
  170.                     .GetFormattedLocalizedString(aStringName, [name], 1);
  171.         }
  172.  
  173.         this.SetLabel(str);
  174.       
  175.         var fader = new AviaryElementFader(this.mProgressBox);
  176.       }
  177.       else
  178.         this.mProgressBox.parentNode.removeChild(this.mProgressBox);
  179.     }
  180.   },
  181.  
  182.   endOfObject: true
  183. }
  184.  
  185.  
  186. function AviaryElementFader(aElem)
  187. {
  188.   this.init(aElem);
  189. }
  190.  
  191. AviaryElementFader.prototype =
  192. {
  193.   kInitialDelayMS: 5000,    // Wait 5 seconds before starting the fade.
  194.   kFadeTimeMS:     3000,    // 3 seconds of fading.
  195.   kFadeIncrement:  0.05,    // Change the opacity this much each time.
  196.  
  197.   mElem: null,
  198.   mStepDelay: 0,
  199.  
  200.   init: function(aElem)
  201.   {
  202.     if (!aElem)
  203.       return;
  204.  
  205.     this.mStepDelay = Math.floor(this.kFadeTimeMS * this.kFadeIncrement);
  206.  
  207.     this.mElem = aElem;
  208.     this.mElem.style.opacity = 1.0;
  209.     var self = this;
  210.     window.setTimeout(function() {self.fadeStep()}, this.kInitialDelayMS, self);
  211.   },
  212.  
  213.   fadeStep: function()
  214.   {
  215.     var opacity = parseFloat(this.mElem.style.opacity);
  216.     if (opacity > 0)
  217.     {
  218.       opacity -= this.kFadeIncrement;
  219.       this.mElem.style.opacity = opacity;
  220.       var self = this;
  221.       window.setTimeout(function() {self.fadeStep()}, this.mStepDelay, self);
  222.     }
  223.     else
  224.     {
  225.       this.mElem.parentNode.removeChild(this.mElem);
  226.     }
  227.   },
  228.  
  229.   endOfObject: true
  230. }
  231.